-
Notifications
You must be signed in to change notification settings - Fork 58
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
本番リリース #161
Conversation
Style-Bert-VITS2の設定更新
…iables-setting 環境変数周りの修正
The latest updates on your projects. Learn more about Vercel for Git ↗︎
|
Walkthroughこのプルリクエストは、AIサービスの設定や機能を構成するための環境変数を追加することに重点を置いています。 Changes
Possibly related PRs
TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
Outside diff range and nitpick comments (2)
.env.example (1)
51-60
: その他の設定が追加されました。背景画像のパス、紹介文の表示、キャラクター名、アシスタントテキストの表示、英語から日本語への変換、コントロールパネルの表示、WebSocket モード、スライドモードなどを設定するための環境変数が追加されました。
ドキュメントの追加が必要です。
追加された環境変数の目的と設定可能な値について、READMEファイルなどにドキュメントを追加してください。変数名だけでは設定の意図が明確ではありません。
locales/ko/translation.json (1)
129-130
: 設定をリセットするオプションの追加は良いアイデアだと思います。トラブルシューティングや新たに始める際に役立ちます。リセット後にページをリロードして変更を反映させるのも適切です。
ただし、ユーザーのデータが失われる可能性があるため、リセットの前に確認ダイアログを表示することをおすすめします。
例えば、"設定をリセットすると現在の設定が失われます。よろしいですか?"といったメッセージを表示し、ユーザーの同意を得てからリセットを実行するようにしましょう。
Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Files selected for processing (31)
- .env (1 hunks)
- .env.example (1 hunks)
- .gitignore (0 hunks)
- docs/README_ko.md (0 hunks)
- docs/README_zh.md (0 hunks)
- locales/en/translation.json (2 hunks)
- locales/ja/translation.json (2 hunks)
- locales/ko/translation.json (2 hunks)
- locales/zh/translation.json (2 hunks)
- src/components/iconButton.tsx (2 hunks)
- src/components/introduction.tsx (3 hunks)
- src/components/menu.tsx (1 hunks)
- src/components/messageInput.tsx (4 hunks)
- src/components/messageInputContainer.tsx (1 hunks)
- src/components/settings/advancedSettings.tsx (2 hunks)
- src/components/settings/voice.tsx (4 hunks)
- src/features/chat/aiChatFactory.ts (1 hunks)
- src/features/chat/difyChat.ts (1 hunks)
- src/features/chat/handlers.ts (0 hunks)
- src/features/chat/vercelAIChat.ts (3 hunks)
- src/features/messages/speakCharacter.ts (3 hunks)
- src/features/messages/synthesizeStyleBertVITS2.ts (1 hunks)
- src/features/messages/synthesizeVoiceElevenlabs.ts (1 hunks)
- src/features/stores/home.ts (3 hunks)
- src/features/stores/menu.ts (0 hunks)
- src/features/stores/settings.ts (4 hunks)
- src/pages/api/aiChat.ts (2 hunks)
- src/pages/api/difyChat.ts (1 hunks)
- src/pages/api/elevenLabs.ts (1 hunks)
- src/pages/api/stylebertvits2.ts (1 hunks)
- src/utils/migrateStore.ts (1 hunks)
Files not reviewed due to no reviewable changes (5)
- .gitignore
- docs/README_ko.md
- docs/README_zh.md
- src/features/chat/handlers.ts
- src/features/stores/menu.ts
Additional context used
Biome
src/features/stores/settings.ts
[error] 157-157: Unnecessary use of boolean literals in conditional expression.
Simplify your code by directly assigning the result without using a ternary operator.
If your goal is negation, you may use the logical NOT (!) or double NOT (!!) operator for clearer and concise code.
Check for more details about NOT operator.
Unsafe fix: Remove the conditional expression with(lint/complexity/noUselessTernary)
[error] 169-169: Unnecessary use of boolean literals in conditional expression.
Simplify your code by directly assigning the result without using a ternary operator.
If your goal is negation, you may use the logical NOT (!) or double NOT (!!) operator for clearer and concise code.
Check for more details about NOT operator.
Unsafe fix: Remove the conditional expression with(lint/complexity/noUselessTernary)
[error] 171-171: Unnecessary use of boolean literals in conditional expression.
Simplify your code by directly assigning the result without using a ternary operator.
If your goal is negation, you may use the logical NOT (!) or double NOT (!!) operator for clearer and concise code.
Check for more details about NOT operator.
Unsafe fix: Remove the conditional expression with(lint/complexity/noUselessTernary)
[error] 184-184: Unnecessary use of boolean literals in conditional expression.
Simplify your code by directly assigning the result without using a ternary operator.
If your goal is negation, you may use the logical NOT (!) or double NOT (!!) operator for clearer and concise code.
Check for more details about NOT operator.
Unsafe fix: Remove the conditional expression with(lint/complexity/noUselessTernary)
[error] 185-185: Unnecessary use of boolean literals in conditional expression.
Simplify your code by directly assigning the result without using a ternary operator.
If your goal is negation, you may use the logical NOT (!) or double NOT (!!) operator for clearer and concise code.
Check for more details about NOT operator.
Unsafe fix: Remove the conditional expression with(lint/complexity/noUselessTernary)
Additional comments not posted (114)
src/components/iconButton.tsx (3)
6-6
: LGTM!
isProcessingIcon
プロパティの追加は適切です。keyof KnownIconType
型を使用することで、有効なアイコン名のみを受け入れるようになっています。
13-13
: LGTM!
isProcessingIcon
プロパティを分割代入で取得しています。これにより、コンポーネント内でisProcessingIcon
を使用できるようになります。
25-25
: LGTM!処理中の状態で表示するアイコンをカスタマイズできるようになりました。
isProcessingIcon
が指定されていない場合は、デフォルトのアイコン'24/Dot'
が使用されます。この変更により、ユーザーインターフェースの応答性と明確さが向上します。src/utils/migrateStore.ts (1)
10-10
: 変更を承認します。コードベースの他の部分への影響を確認してください。
Store
型定義の変更は、イントロダクション表示の管理方法の変更を反映しています。この変更は、ユーザーインターフェースの設定に関する状態管理におけるセマンティックな調整を示唆しています。この型定義の変更は、この型に依存するコードベースの他の部分に対応する変更が必要になる可能性があります。イントロダクション表示に関連するユーザーエクスペリエンスや設定管理に影響を与える可能性があります。
次のスクリプトを実行して、
Store
型の使用状況を確認してください:Verification successful
Store
型の変更は局所的であり、コードベース全体への影響は限定的です。
src/utils/migrateStore.ts
ファイル内のStore
型定義の変更は、主にマイグレーション目的で使用されており、他の部分に直接的な影響を与えていないことが確認できました。ただし、以下の点に注意してください:
- マイグレーションロジックが新しい
showIntroduction
プロパティを正しく処理することを確認してください。homeStore
の状態が正しく更新され、新しいshowIntroduction
プロパティが適切に扱われていることを確認してください。この変更は適切であり、大きな問題は見つかりませんでしたが、関連する機能のテストを行うことをお勧めします。
Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Description: コードベース内の `Store` 型の使用状況を検索します。 # Test: `Store` 型の使用状況を検索します。期待される結果: 変更に対応する必要がある場所が特定されます。 rg --type typescript -C 5 $'Store'Length of output: 68
Script:
#!/bin/bash # Description: `Store` 型の使用状況を検索します(複数の方法を使用) # 方法1: ファイル拡張子を使用して TypeScript ファイルを検索し、`Store` を含む行を抽出 echo "Method 1: Searching for 'Store' in .ts files" rg -C 5 'Store' --glob '*.ts' # 方法2: `fd` を使用して TypeScript ファイルを見つけ、`xargs` と `rg` を使用して検索 echo "Method 2: Using fd and xargs to search for 'Store'" fd -e ts -X rg -C 5 'Store' {} # 方法3: `ast-grep` を使用して `Store` 型の使用を検索 echo "Method 3: Using ast-grep to search for 'Store' type usage" ast-grep --lang typescript --pattern 'type $_ = Store' ast-grep --lang typescript --pattern 'interface $_ extends Store' ast-grep --lang typescript --pattern 'const $_: Store' ast-grep --lang typescript --pattern 'function $_($_: Store)'Length of output: 77834
src/features/messages/synthesizeStyleBertVITS2.ts (1)
6-6
: 新しいパラメータの追加は良い改善だと思います。
stylebertvits2ApiKey
、stylebertvits2SdpRatio
、stylebertvits2Length
の追加により、APIリクエストのカスタマイズ性が向上しています。これにより、以下のメリットが期待できます。
stylebertvits2ApiKey
によるAPIのセキュリティ向上stylebertvits2SdpRatio
とstylebertvits2Length
による音声合成の品質向上コードの変更内容は分かりやすく、特に問題は見当たりません。
Also applies to: 9-10, 16-16, 19-20
src/features/chat/aiChatFactory.ts (3)
26-26
: シンプルな設定の取得方法に変更されています。
ss
オブジェクトから直接サービスキーを取得するように変更されており、環境変数へのフォールバックが削除されています。これにより、設定の取得方法がシンプルになり、ss
オブジェクトに必要なプロパティが定義されていない場合のエラーハンドリングが明確になる可能性があります。
33-34
: ローカルLLMの設定取得方法が改善されています。
ss
オブジェクトから直接localLlmUrl
とselectAIModel
のプロパティを取得するように変更されており、環境変数へのフォールバックが削除されています。これにより、設定の取得方法がシンプルになり、ss
オブジェクトに必要なプロパティが定義されていない場合のエラーハンドリングが明確になる可能性があります。
39-40
: Difyサービスの設定取得方法が改善されています。
ss
オブジェクトから直接difyKey
とdifyUrl
のプロパティを取得するように変更されており、環境変数へのフォールバックが削除されています。これにより、設定の取得方法がシンプルになり、ss
オブジェクトに必要なプロパティが定義されていない場合のエラーハンドリングが明確になる可能性があります。src/features/messages/synthesizeVoiceElevenlabs.ts (1)
41-66
: 変更を承認します。関数の実装が大幅に改善されています。主な変更点は以下の通りです:
- APIリクエストのパラメータをJSONボディにまとめることで、APIコールの構造が改善されました。
- レスポンスが成功しなかった場合に、より詳細なエラーメッセージを投げるようになり、エラーハンドリングが向上しました。
- WAVヘッダーの作成やBlobURLの生成を削除し、
Uint8Array
を直接返すことで、オーディオデータの処理が簡素化されました。これらの変更により、関数のロジックが合理化され、エラーハンドリングが改善され、オーディオデータの処理が簡素化されました。また、関数のパブリックAPIや呼び出し側のコードに影響はありません。
良い変更だと思います。
.env.example (5)
1-3
: AI サービスの選択が追加されました。
NEXT_PUBLIC_SELECT_AI_SERVICE
とNEXT_PUBLIC_SELECT_AI_MODEL
の環境変数を使用して、利用する AI サービスとモデルを指定できるようになりました。これらの変数は必須です。適切な値を設定してください。
5-7
: ローカル LLM の設定が追加されました。
NEXT_PUBLIC_LOCAL_LLM_URL
とNEXT_PUBLIC_LOCAL_LLM_MODEL
の環境変数を使用して、ローカルで実行している LLM サービスの URL とモデルを指定できるようになりました。ローカルの LLM を使用する場合は、これらの変数に適切な値を設定してください。
42-45
: YouTube 連携の設定が追加されました。
NEXT_PUBLIC_YOUTUBE_API_KEY
、NEXT_PUBLIC_YOUTUBE_MODE
、NEXT_PUBLIC_YOUTUBE_LIVE_ID
の環境変数を使用して、YouTube 連携を設定できるようになりました。YouTube 連携を使用する場合は、これらの変数に適切な値を設定してください。
47-49
: 言語選択の設定が追加されました。
NEXT_PUBLIC_SELECT_LANGUAGE
とNEXT_PUBLIC_SELECT_VOICE_LANGUAGE
の環境変数を使用して、アプリケーションの言語と音声の言語を選択できるようになりました。これらの変数に適切な値を設定してください。
62-75
: AI サービスの API キーが追加されました。OpenAI、Anthropic、Google、Azure、Groq、Cohere、MistralAI、Perplexity、Fireworks など、様々な AI サービスの API キーを設定するための環境変数が追加されました。利用するサービスの API キーを設定してください。
また、Dify サービスの API キーと URL を設定するための環境変数も追加されました。
API キーの扱いに注意してください。
API キーは
NEXT_PUBLIC_
のプレフィックスがついていないため、クライアント側に公開されるべきではありません。API キーは常に安全に保管し、漏洩しないように注意してください。.env (14)
2-2
: LGTM!AI サービスを選択するための環境変数が適切に定義されています。デフォルト値が空であることは問題ありません。
3-3
: LGTM!AI モデルを選択するための環境変数が適切に定義されています。デフォルト値が空であることは問題ありません。
6-6
: LGTM!ローカルの大規模言語モデル (LLM) の URL を設定するための環境変数が適切に定義されています。デフォルト値が空であることは問題ありません。
7-7
: LGTM!ローカルの大規模言語モデル (LLM) のモデルを設定するための環境変数が適切に定義されています。デフォルト値が空であることは問題ありません。
10-10
: LGTM!音声を選択するための環境変数が適切に定義されています。デフォルト値が空であることは問題ありません。
13-13
: LGTM!VoiceVox のスピーカーを設定するための環境変数が適切に定義されています。デフォルト値が空であることは問題ありません。
14-14
: LGTM!VoiceVox の速度を設定するための環境変数が適切に定義されています。デフォルト値が空であることは問題ありません。
15-15
: LGTM!VoiceVox のピッチを設定するための環境変数が適切に定義されています。デフォルト値が空であることは問題ありません。
16-16
: LGTM!VoiceVox のイントネーションを設定するための環境変数が適切に定義されています。デフォルト値が空であることは問題ありません。
19-19
: LGTM!KoeiroMap の API キーを設定するための環境変数が適切に定義されています。デフォルト値が空であることは問題ありません。
22-22
: LGTM!Google TTS のタイプを設定するための環境変数が適切に定義されています。デフォルト値が空であることは問題ありません。
25-25
: LGTM!StyleBertVits2 のモデル ID を設定するための環境変数が適切に定義されています。デフォルト値が空であることは問題ありません。
26-26
: LGTM!StyleBertVits2 のスタイルを設定するための環境変数が適切に定義されています。デフォルト値が空であることは問題ありません。
27-27
: LGTM!StyleBertVits2 の SDP 比率を設定するための環境変数が適切に定義されています。デフォルト値が空であることは問題ありません。
src/features/stores/home.ts (3)
10-10
: インターフェースのプロパティ名変更は適切です。
dontShowIntroduction
からshowIntroduction
へのプロパティ名の変更は、イントロダクションの表示ロジックをより直感的に表現しています。この変更によってコードの可読性と保守性が向上します。ただし、このプロパティを参照しているすべてのコードを更新して、正しいロジックが適用されるようにしてください。
38-38
: 環境変数に基づいてイントロダクションの表示を制御する変更は適切です。
NEXT_PUBLIC_SHOW_INTRODUCTION
環境変数に基づいてshowIntroduction
プロパティを初期化する変更は、イントロダクションの表示をより柔軟に制御できるようにします。この変更によって、異なるデプロイメントシナリオに適応しやすくなり、ユーザーオンボーディングのカスタマイズが容易になります。
75-75
:partialize
関数でのshowIntroduction
プロパティのシリアライズは適切です。
partialize
関数内でshowIntroduction
プロパティをシリアライズすることで、このプロパティが正しく永続化されることが保証されます。この変更によって、永続化された状態とストアの実際の状態の一貫性が維持されます。src/pages/api/difyChat.ts (5)
8-21
: リクエストの初期チェックとパースが適切に行われています。POSTメソッドのみを許可し、リクエストボディからパラメータを抽出する処理は適切です。これにより、エンドポイントが期待されるリクエストタイプのみを処理し、コードの可読性も向上しています。
23-43
: API キーと URL の検証が適切に行われています。リクエストボディまたは環境変数に
apiKey
とurl
が存在するかどうかを確認し、いずれかが欠落している場合は適切なエラーメッセージとともに 400 エラーを返します。これは、関数が正しく動作するために重要な検証です。また、環境変数をフォールバック値として使用することで、構成の柔軟性が提供されています。エラーレスポンスには明確なエラーメッセージとコードがあり、デバッグに役立ちます。
45-56
: API リクエストの準備が適切に行われています。関数は、API キーを含む認証ヘッダーを含む API リクエスト用のヘッダーを構築します。また、Dify API に必要なパラメータを含むリクエストボディを準備します。
ヘッダーとボディの準備は簡単で、Dify API の予想される構造に従っています。
response_mode
はstream
パラメータに基づいて設定され、レスポンスタイプの柔軟性を提供します。
58-90
: API リクエストとレスポンス処理が適切に行われています。関数は、準備されたヘッダーとボディを使用して Dify API に POST リクエストを送信します。レスポンスが成功しない場合は、適切なステータスコードでエラーレスポンスを返します。
ストリーミングが有効な場合は、レスポンスボディを text/event-stream として返します。ストリーミングが有効でない場合は、JSON レスポンスを解析して返します。
API リクエストは、エッジランタイム環境での使用に適した
fetch
関数を使用して行われます。レスポンス処理は、成功とエラーの両方のケースをカバーし、有益なエラーレスポンスを提供します。レスポンスタイプはstream
パラメータに基づいて決定され、クライアントの期待との互換性が保証されます。
91-103
: エラー処理が適切に行われています。関数は、API 呼び出し中に発生したエラーをキャッチします。デバッグ目的でエラーをコンソールに記録します。適切なエラーメッセージとともに 500 Internal Server Error レスポンスを返します。
エラーをキャッチして処理することは、関数がクラッシュするのを防ぎ、クライアントに意味のあるエラーレスポンスを提供するために重要です。エラーをログに記録することは、デバッグと監視に役立ちます。
500 ステータスコードと "Internal Server Error" メッセージは、予期しないエラーに適しています。
src/features/chat/difyChat.ts (3)
5-9
: 良いエラーハンドリングの実装ですね!ユーザーの選択した言語に基づいてエラーメッセージをローカライズする
handleApiError
関数の追加は素晴らしいです。これにより、ユーザーフレンドリーなエラー報告が可能になります。また、
errorCode
が提供されない場合のデフォルトのエラーメッセージのハンドリングも適切に行われています。
17-93
: エラーハンドリングとストリーム読み取りロジックが改善されています!
getDifyChatResponseStream
関数のエラーハンドリングとストリーム読み取りロジックの改善は素晴らしいです。主な改善点は以下の通りです:
- APIレスポンスが成功しない場合、レスポンスボディのステータスとエラーコードを含む詳細なエラーがスローされるようになりました。
- ストリーム読み取りロジックがtry-catchブロックでラップされ、読み取り中のエラーが適切に処理されるようになりました。
- ストリーム読み取り中にエラーが発生した場合、
handleApiError
で生成されたエラーメッセージをエンキューし、ストリームを適切に閉じる新しいストリームが返されます。これらの修正により、関数のAPIエラーに対する回復力が向上し、ユーザーに表示されるエラーメッセージの明確さが改善されます。
11-16
: 関数シグネチャの変更を確認してください。
getDifyChatResponseStream
関数の変更は適切に行われています。ただし、関数シグネチャが変更されているため、この関数を呼び出しているコードに影響がある可能性があります。コードベース全体でこの関数の使用法を確認し、必要に応じて修正してください。
次のスクリプトを実行して、関数の使用法を確認してください:
Verification successful
getDifyChatResponseStream
関数の使用が正しいことを確認しましたコードベース全体を検索した結果、
getDifyChatResponseStream
関数の新しいシグネチャが正しく実装され、一貫して使用されていることが確認できました。
- 関数は
src/features/chat/difyChat.ts
で新しいシグネチャで定義されています。- 唯一の使用箇所は
src/features/chat/aiChatFactory.ts
で、すべての必要なパラメータが正しく渡されています。- 古いシグネチャの使用は見つかりませんでした。
これらの結果から、関数シグネチャの変更が適切に実装され、コードベース全体で一貫して使用されていることが確認できました。追加の修正は必要ありません。
Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # 説明: `getDifyChatResponseStream`関数の使用法が新しいシグネチャと一致していることを確認します。 # テスト: 関数の使用法を検索します。期待される結果: 新しいシグネチャの出現のみ。 rg --type typescript -A 5 $'getDifyChatResponseStream'Length of output: 88
Script:
#!/bin/bash # 説明: `getDifyChatResponseStream`関数の使用法を様々な方法で検索します。 # 方法1: ファイルタイプを指定せずに検索 echo "方法1: ファイルタイプを指定せずに検索" rg -A 5 "getDifyChatResponseStream" # 方法2: TypeScriptファイルを見つけて、その中で検索 echo "方法2: TypeScriptファイルを見つけて、その中で検索" fd -e ts -e tsx | xargs rg -A 5 "getDifyChatResponseStream" # 方法3: ast-grepを使用して関数呼び出しを検索 echo "方法3: ast-grepを使用して関数呼び出しを検索" ast-grep --lang javascript --pattern "getDifyChatResponseStream($_)"Length of output: 3634
src/pages/api/elevenLabs.ts (3)
8-32
: LGTM!この関数は、与えられたデータ長に基づいて適切なWAVヘッダーを生成しています。必要なチャンク(RIFF、fmt、data)とそれに対応するデータが正しく設定されています。実装は明確で問題ありません。
34-38
: LGTM!この関数は、指定されたオフセットでDataViewに文字列を書き込むシンプルな実装です。入力文字列の各文字に対してループを回し、対応するオフセットでDataViewにuint8の値を設定しています。コードは簡潔で理解しやすいです。
40-108
: 素晴らしい実装ですね!このハンドラー関数は、Eleven Labs APIを使用してテキストから音声への変換を処理するための明確で論理的なフローに従っています。必要な検証とエラー処理が行われ、適切なエラーレスポンスが返されます。
Eleven LabsへのAPIコールは、必要なパラメータとヘッダーを使用して行われます。レスポンスの処理では、
createWavHeader
関数を使用してWAVヘッダーを作成し、受信したオーディオデータと連結しています。結果のWAVオーディオは、正しいコンテンツタイプと長さでクライアントに送り返されます。また、プロセス中に発生する可能性のあるエラーをキャッチして返すためのエラーハンドリングも適切に行われています。
全体的に、このコードは明確で読みやすく、テキストから音声への変換を適切に処理しています。素晴らしい実装だと思います!
src/pages/api/stylebertvits2.ts (3)
32-35
: LGTM!
stylebertvits2ServerUrl
とstylebertvits2ApiKey
の値を正しくリクエストボディまたは環境変数から取得しています。
37-38
: LGTM!
stylebertvits2SdpRatio
とstylebertvits2Length
の値を正しくリクエストボディから取得しています。
42-113
: LGTM!
stylebertvits2ServerUrl
に基づいて、リクエストを適切に処理するための条件分岐が正しく実装されています。
- 'https://api.runpod.ai'を含まない場合は、クエリパラメータを使用したGETリクエストが行われます。
- 'https://api.runpod.ai'を含む場合は、JSONペイロードを使用したPOSTリクエストが行われます。
- それぞれのリクエストは適切なヘッダーと認証情報を使用して送信されています。
- レスポンスの処理も、異なるレスポンス形式に対応するように正しく更新されています。
コードの論理とシンタックスに問題はありません。
src/features/chat/vercelAIChat.ts (3)
5-9
: 良い実装ですね!
handleApiError
関数は、ユーザーの選択した言語に基づいてAPIエラーを適切に処理しています。i18next
ライブラリを使用して国際化を行い、APIから受け取ったエラーコードに対応するローカライズされたエラーメッセージを返しています。この実装により、ユーザーにとってわかりやすいエラーメッセージを提供できます。
33-36
: エラーハンドリングの改善が素晴らしいです!APIリクエストが失敗した場合、レスポンスボディを解析してエラーコードを抽出し、エラーメッセージに含めるようになりました。これにより、より具体的なフィードバックを提供できます。
また、一般的なエラーをスローするのではなく、
handleApiError
を使用してローカライズされたエラーメッセージを返すようになりました。これにより、ユーザーに適切な言語でわかりやすいエラーメッセージを表示できます。Also applies to: 44-44
68-131
: ストリーミング処理中のエラーハンドリングが改善されました!
getVercelAIChatResponseStream
関数では、ストリーミング処理中に発生するエラーをキャッチするためにtry-catchブロックが使用されるようになりました。エラーが発生した場合、デバッグ目的でエラーがログに記録されます。エラーをスローするのではなく、
handleApiError
を使用してローカライズされたエラーメッセージをエンキューする新しいReadableStream
を返すようになりました。これにより、APIとのやり取り中にエラーが発生した場合でも、ユーザーは選択した言語で意味のあるフィードバックを受け取ることができます。src/components/messageInput.tsx (4)
1-1
: LGTM!
useRef
のインポートは、textareaRef
を使用するために必要です。
29-29
: LGTM!
textareaRef
の宣言は正しく行われています。型指定も適切です。
43-47
: LGTM!
chatProcessing
が false の場合にテキストエリアをクリアしてフォーカスを当てる処理は、ユーザーエクスペリエンスの向上につながります。textareaRef
を使用して適切にテキストエリアにアクセスしています。
85-85
: LGTM!録音中は異なるアイコン (
24/PauseAlt
) を使用するようにisProcessingIcon
プロップを更新しています。これにより、ユーザーに録音状態を視覚的にフィードバックできます。src/components/messageInputContainer.tsx (10)
11-14
: LGTM!新しい状態変数
isListening
、recognition
、keyPressStartTime
、transcriptRef
が適切に導入されています。これらの変数は、音声認識の状態、SpeechRecognition
オブジェクト、キーボードイベント、トランスクリプトを追跡するために使用されます。
17-42
: LGTM!
useEffect
フックを使用してSpeechRecognition
オブジェクトを初期化する方法は適切です。認識オブジェクトは、言語設定、連続モード、中間結果を使用して適切に構成されています。onresult
とonerror
のイベントハンドラーが正しくセットアップされています。
44-51
: LGTM!
startListening
関数は、音声認識を開始するために適切に実装されています。認識オブジェクトが存在し、現在リッスンしていないことを確認しています。transcriptRef
とuserMessage
をリセットし、認識を開始し、isListening
を true に設定することで、リッスンプロセスが正しく開始されます。
53-69
: LGTM!
stopListening
関数は、音声認識を停止するために適切に実装されています。認識オブジェクトが存在し、現在リッスンしていることを確認しています。認識を停止し、isListening
を false に設定することで、リッスンプロセスが正しく終了します。キーボードでトリガーされた場合は、押下時間をチェックし、条件が満たされればトランスクリプトを処理します。キーボードでトリガーされていない場合は、トランスクリプトが存在すれば直接処理します。トランスクリプトの処理には、onChatProcessStart
コールバックの呼び出しとuserMessage
のリセットが含まれます。
71-77
: LGTM!
toggleListening
関数は、音声認識の状態を切り替えるために適切に実装されています。現在のisListening
状態をチェックし、それに応じてstopListening
またはstartListening
を呼び出します。現在の状態に基づいて適切な関数を呼び出すことで、スムーズなトグル動作が保証されます。
80-86
: LGTM!
handleKeyDown
関数は、キーダウンイベントを処理するために適切に実装されています。Alt キーまたは Meta キーが押されていて、リッスンがアクティブでない場合をチェックしています。条件が満たされると、keyPressStartTime
を設定し、isKeyboardTriggered
を true に設定し、リッスンを開始します。これにより、ユーザーはキーボードショートカットを使用して音声認識をトリガーできます。
88-92
: LGTM!
handleKeyUp
関数は、キーアップイベントを処理するために適切に実装されています。離されたキーが Alt または Meta であるかどうかをチェックしています。条件が満たされると、リッスンを停止し、keyPressStartTime
をリセットします。これにより、キーボードショートカットキーが離されたときに音声認識が停止することが保証されます。
95-101
: LGTM!
useEffect
フックを使用して、キーダウンとキーアップイベントのイベントリスナーを追加および削除しています。イベントリスナーは、コンポーネントがマウントされるときに追加され、アンマウントされるときに削除されます。これにより、リスナーが適切に管理され、メモリリークが防止されます。
104-109
: LGTM!
handleSendMessage
関数は、ユーザーメッセージの送信を処理するために適切に実装されています。空白をトリミングした後のuserMessage
が空でないかどうかをチェックしています。条件が満たされると、userMessage
を引数としてonChatProcessStart
コールバックを呼び出します。メッセージを送信した後、userMessage
状態を空の文字列にリセットします。これにより、空でないメッセージのみが送信され、送信後に入力がクリアされることが保証されます。
111-116
: LGTM!
handleInputChange
関数は、ユーザー入力の変更を処理するために適切に実装されています。イベントオブジェクトをパラメータとして受け取り、入力値でuserMessage
状態を更新します。これにより、userMessage
状態が常に入力フィールドの現在の値を反映することが保証されます。src/components/settings/advancedSettings.tsx (4)
14-14
: 状態管理の改善
showControlPanel
の状態をmenuStore
からsettingsStore
に移動したことで、コンポーネントの状態管理がより一貫性のあるものになりました。この変更は、保守性の向上につながると思われます。
22-31
: ローカルストレージのリセット機能の追加ユーザーがローカルデータをリセットできる新しいボタンの追加は素晴らしいですね。
settingsStore
のclearStorage
メソッドを呼び出してページをリロードする方法は、シンプルかつ効果的です。この機能強化により、ユーザーはコンポーネントから離れることなく設定をリセットできるようになりました。
110-112
: 状態更新の構文の改善
settingsStore
のsetState
呼び出しが、コールバックを使用せずにshowControlPanel
の状態を直接設定するように更新されました。これは構文上のマイナーな変更ですが、以前のコールバックアプローチよりも簡潔になっています。
Line range hint
1-129
: コンポーネントの全体的な評価
AdvancedSettings
コンポーネントの全体的な構造と実装は良くできていると思います。Disclosure
コンポーネントを使用して、高度な設定のオプションを表示/非表示にする方法は適切です。また、useTranslation
フックを使用して翻訳が適切に処理されています。settingsStore
に状態管理が集約されているのも良い設計だと思います。コンポーネント全体として、問題なく機能すると考えられます。src/components/introduction.tsx (6)
15-15
: 変更LGTM!変数名の変更により、コードの可読性が向上しています。イントロダクションを表示するかどうかを明確に示すようになりました。
18-18
: 変更LGTM!状態変数の名前が
showIntroduction
からdisplayIntroduction
に変更されました。
この変数はイントロダクションモーダルの表示を制御するために使用されます。
変数名の変更により、コードの可読性が向上しています。
24-25
: 変更LGTM!
useEffect
フックが更新され、homeStore
の新しいshowIntroduction
状態に基づいてdisplayIntroduction
が設定されるようになりました。
これにより、イントロダクションの表示が正しく初期化されることが保証されます。
showIntroduction
を依存関係に追加することで、showIntroduction
状態が変更されるたびにエフェクトが再実行されるようになっています。
55-55
: 変更LGTM!returnステートメントが更新され、モーダルをレンダリングするかどうかを判断するために、古い
showIntroduction
ではなくdisplayIntroduction
がチェックされるようになりました。
この変更により、イントロダクションモーダルのレンダリングがdisplayIntroduction
状態によって正しく制御されるようになっています。
133-133
: 変更LGTM!ユーザーがイントロダクションの表示を切り替えることができるチェックボックスが、新しい状態変数
showIntroduction
を反映するように更新されました。
この変更により、チェックボックスのチェック状態がshowIntroduction
状態によって正しく制御されるようになっています。
136-136
: 変更LGTM!チェックボックスの onChange ハンドラが更新され、チェックボックスの状態が変更されたときに
homeStore
のshowIntroduction
状態が更新されるようになりました。
この変更により、チェックボックスの状態変更が正しくストアに反映されるようになっています。locales/zh/translation.json (4)
62-62
: LGTM!Style-Bert-VITS2の使用方法について、サポートされている言語、ローカルAPIを使用する場合のアプリケーションのダウンロードと起動、APIキーの設定など、ユーザーに必要な情報が明確に説明されています。
68-73
: 機能拡張に伴う新しい設定項目の追加Style-Bert-VITS2の設定に関する新しいキーと値が追加されており、サーバーURL、APIキー、モデルID、スタイル、SDP/DP混合比、音声速度など、ユーザーにとって有用なカスタマイズオプションが提供されています。これらの設定項目は明確で分かりやすいものになっています。
128-129
: ユーザーエクスペリエンスの向上追加された文字列は、PDFの変換時に必須フィールドが設定されていない場合のエラーメッセージと、設定をリセットするためのオプション(ページがリロードされることの警告付き)を提供しています。これらの文字列は、ユーザーエクスペリエンスを向上させるために明確で簡潔、かつ有益な情報を提供しています。
130-137
: エラーハンドリングの改善"Errors"オブジェクトの追加は、エラーの処理とユーザーへの通知を適切に行うための良い実装です。追加されたエラーメッセージは、APIキーの未設定、AIサービスの設定値の不正、AI APIの実行エラー、不適切なAIサービスの選択、不適切なリクエスト、予期しないエラーなど、様々な潜在的な問題をカバーしています。これらのエラーメッセージは明確で具体的であり、ユーザーが問題を特定して解決するのに役立ちます。
src/pages/api/aiChat.ts (8)
32-41
: LGTM!POSTメソッド以外のリクエストに対して適切なエラーレスポンスを返しています。エラーコードを追加したことで、エラーの性質がより明確になりました。
46-52
: APIキーの取得ロジックが改善されましたリクエストに
apiKey
が含まれていない場合、aiService
に基づいて環境変数からAPIキーを取得するようになりました。これにより、APIキーの取得方法がより柔軟になりました。
54-62
: APIキーが見つからない場合のエラーハンドリングが改善されましたAPIキーが環境変数からも見つからない場合、より詳細なエラーメッセージとエラーコードを含むレスポンスを返すようになりました。これにより、エラーの原因がより明確になります。
63-75
: AIサービスやモデルが無効な場合のエラーハンドリングが追加されました
aiService
やmodel
が無効な場合、適切なエラーメッセージとエラーコードを含むレスポンスを返すようになりました。これにより、無効なリクエストに対してより明確なフィードバックを提供できます。
78-101
: AIサービスの設定が改善されました各AIサービスの設定関数が、解決された
aiApiKey
を一貫して使用するようになりました。これにより、すべてのサービス呼び出しが正しいAPIキーを使用することが保証されます。変更により、AIサービス設定の一貫性と信頼性が向上しました。
105-114
: 無効なAIサービスに対するエラーハンドリングが追加されました
aiService
が無効な場合、適切なエラーメッセージとエラーコードを含むレスポンスを返すようになりました。これにより、無効なAIサービスに対してより明確なフィードバックを提供できます。
125-143
: ストリーミングと非ストリーミングのレスポンス処理が改善されました
try-catch
ブロックが、ストリーミングと非ストリーミングの両方のレスポンスを包含するように調整されました。この変更により、両方のシナリオのエラー処理が一元化され、コードの保守性と明確性が向上しました。
144-156
: API呼び出し中の予期しないエラーのハンドリングが改善されましたAPI呼び出し中に予期しないエラーが発生した場合、エラーがログに記録され、エラーメッセージとエラーコードを含むレスポンスが返されるようになりました。エラーコードにより、エラーの性質に関する追加のコンテキストが提供されます。
locales/ja/translation.json (6)
62-62
: 追加された説明は適切です。Style-Bert-VITS2サービスを使用する際に、必要に応じてAPIキーを設定する必要があることをユーザーに伝えることは重要です。この追加された説明によって、アプリケーションの設定方法がより明確になりました。
69-74
: Style-Bert-VITS2の設定オプションが拡張されました。Style-Bert-VITS2サービスに関連する新しい設定項目が追加されたことで、ユーザーはサーバーURL、APIキー、モデルID、スタイル、SDP/DP比、長さなどのさまざまな側面をカスタマイズできるようになりました。これらの設定オプションを提供することで、アプリケーションの柔軟性とユーザビリティが向上しています。
129-129
: PDFの変換に失敗した場合のエラーメッセージが追加されました。PDFファイル、フォルダ名、APIキーが正しく設定されているかを確認するようユーザーに促すエラーメッセージが追加されたことで、PDFの変換機能のエラー処理とユーザーエクスペリエンスが向上しました。具体的な確認項目を示すことで、ユーザーが問題をすばやく特定して修正できるようになります。
130-130
: アプリケーションの設定をリセットするオプションが追加されました。ローカルストレージに保存されている設定をリセットするオプションが追加されたことで、トラブルシューティングやデフォルト設定での再開に役立ちます。ページのリロードについての言及は、リセット操作がアプリケーションのリフレッシュをトリガーしてデフォルト設定を適用することを示しています。この機能により、アプリケーションの使いやすさと保守性が向上します。
131-138
: エラーメッセージを集中管理する "Errors" オブジェクトが追加されました。"Errors" オブジェクトが追加されたことで、アプリケーションのエラー処理とユーザーフィードバックの側面が大幅に改善されました。これにより、アプリケーションの使用中に発生する可能性のあるさまざまなエラーメッセージを保存および管理するための一元的な場所が定義されます。エラーメッセージは、空のAPIキー、無効なAIサービスプロパティ、AI APIエラー、無効なAIサービスの選択、無効なリクエスト、予期しないエラーなど、幅広いシナリオをカバーしており、問題が発生したときにユーザーに具体的で有益なフィードバックを提供します。これにより、問題をより効果的に特定して解決できます。エラーメッセージが日本語であることで、対象ユーザーがエラーフィードバックを簡単に理解して対処できるようになります。
Line range hint
1-138
: 翻訳ファイルの変更は全体的に適切です。
- Style-Bert-VITS2に関連する新しい設定オプションとエラーメッセージが追加されました。これらの変更により、アプリケーションの機能性とユーザビリティが向上しています。
- PDFの変換に失敗した場合のエラー処理が改善され、ユーザーがエラーを解決するためのガイダンスが提供されるようになりました。
- アプリケーションの設定をリセットする機能が追加され、トラブルシューティングやデフォルト設定での再開が容易になりました。
- "Errors" オブジェクトの導入により、エラー処理とユーザーフィードバックが大幅に強化されました。
全体として、これらの変更はアプリケーションの機能性、ユーザーエクスペリエンス、およびメンテナンス性を向上させるものです。
locales/ko/translation.json (3)
62-62
: 良い変更だと思います。必要に応じてAPIキーを設定するよう案内することで、ユーザーにStyle-Bert-VITS2の設定方法をより明確に伝えることができます。
68-73
: Style-Bert-VITS2の設定オプションが拡張されていますね。サーバーURL、APIキー、モデルID、スタイル、SDP/DP比率、話速など、ユーザーが細かく設定できるようになったのは良い変更だと思います。命名規則も既存のものに沿っており、一貫性が保たれています。
128-137
: エラーメッセージの追加は素晴らしいですね。APIキーの未設定、AIサービスの設定ミス、AI APIのエラー、不正なAIサービスの選択、不適切なリクエスト、予期せぬエラーなど、様々なシナリオをカバーしています。具体的なエラーメッセージがあることで、アプリケーションのロバスト性とユーザーとのコミュニケーションが向上します。ユーザーが遭遇した問題をより明確に理解できるようになりますね。
src/features/stores/settings.ts (5)
48-52
: インターフェースの変更は適切です。StyleBERTViTS2モデルの設定に関連する新しいプロパティが追加されています。プロパティ名とデータ型は適切に選択されています。
70-70
: インターフェースの変更は適切です。会話の連続性を管理するための新しいブール型プロパティ
conversationContinuityMode
が追加されています。プロパティ名とデータ型は適切に選択されています。
72-75
: インターフェースの変更は適切です。以前存在した
conversationContinuityMode
プロパティが削除されています。これは、キャラクター設定の扱い方の変更を示唆しています。この変更は、Integrations
インターフェースに同じプロパティが追加されたことと整合しています。
84-84
: インターフェースの変更は適切です。UIや設定の表示を制御するための新しいブール型プロパティ
showControlPanel
が追加されています。プロパティ名とデータ型は適切に選択されています。
110-185
: 設定の初期化の変更は適切です。複数のプロパティについて、環境変数から値を取得するように変更されています。これには、
koeiromapKey
、youtubeApiKey
、および各種の音声設定が含まれます。これらは環境変数またはフォールバック値をデフォルトとするようになりました。youtubeMode
とyoutubeLiveId
のプロパティも環境変数に基づいて設定されるようになりました。環境変数を使用した設定は、デプロイ環境に基づいて簡単にカスタマイズできるため、良い習慣です。フォールバック値により、環境変数が設定されていない場合でもアプリケーションがデフォルト設定で機能できることが保証されます。
静的解析のヒントでは、条件式でのブール型リテラルの使用が不要であると指摘されていますが、このケースでは明確さと明示性のために使用が正当化されると考えられます。
Tools
Biome
[error] 157-157: Unnecessary use of boolean literals in conditional expression.
Simplify your code by directly assigning the result without using a ternary operator.
If your goal is negation, you may use the logical NOT (!) or double NOT (!!) operator for clearer and concise code.
Check for more details about NOT operator.
Unsafe fix: Remove the conditional expression with(lint/complexity/noUselessTernary)
[error] 169-169: Unnecessary use of boolean literals in conditional expression.
Simplify your code by directly assigning the result without using a ternary operator.
If your goal is negation, you may use the logical NOT (!) or double NOT (!!) operator for clearer and concise code.
Check for more details about NOT operator.
Unsafe fix: Remove the conditional expression with(lint/complexity/noUselessTernary)
[error] 171-171: Unnecessary use of boolean literals in conditional expression.
Simplify your code by directly assigning the result without using a ternary operator.
If your goal is negation, you may use the logical NOT (!) or double NOT (!!) operator for clearer and concise code.
Check for more details about NOT operator.
Unsafe fix: Remove the conditional expression with(lint/complexity/noUselessTernary)
[error] 184-184: Unnecessary use of boolean literals in conditional expression.
Simplify your code by directly assigning the result without using a ternary operator.
If your goal is negation, you may use the logical NOT (!) or double NOT (!!) operator for clearer and concise code.
Check for more details about NOT operator.
Unsafe fix: Remove the conditional expression with(lint/complexity/noUselessTernary)
[error] 185-185: Unnecessary use of boolean literals in conditional expression.
Simplify your code by directly assigning the result without using a ternary operator.
If your goal is negation, you may use the logical NOT (!) or double NOT (!!) operator for clearer and concise code.
Check for more details about NOT operator.
Unsafe fix: Remove the conditional expression with(lint/complexity/noUselessTernary)
locales/en/translation.json (7)
62-62
: 説明の更新は適切です。ローカルAPIを使用する場合にAPIキーの設定が必要になる可能性があることを明確にしています。ユーザーにとってわかりやすい説明になっています。
69-69
: 新しいキーの追加は適切です。"StyleBeatVITS2ApiKey"の追加は、APIキーが必要になる可能性について言及している更新された説明と一致しています。このキーの追加に問題はないと思われます。
70-73
: Style-Bert-VITS2の設定用の新しいキーの追加は適切です。Model ID、Style、SDP/DP Mixing Ratio、Speech Rateの新しいキーが追加されたことで、ユーザーはStyle-Bert-VITS2の設定をより細かく制御できるようになります。これらのキーの追加に問題はないと思われます。
128-129
: 新しいエラーメッセージの追加は適切です。"PdfConvertSubmitError"の追加により、送信前にPDFファイル、フォルダ名、APIキーを設定する必要があることをユーザーに明確に伝えることができます。このエラーメッセージの追加により、ユーザーエクスペリエンスが向上します。
129-129
: 設定をリセットするための新しいキーの追加は適切です。"LocalStorageReset"の追加により、ユーザーは設定をリセットできるようになり、ページがリロードされます。このキーの追加に問題はないと思われます。
130-137
: 様々なエラーシナリオ用の新しいエラーメッセージの追加は適切です。"Errors"オブジェクトに、空のAPIキー、無効なAIサービス設定、AI APIエラー、無効なAIサービス選択、無効なリクエスト、予期しないエラーなど、様々なシナリオ用の複数のエラーメッセージが追加されています。これらのエラーメッセージにより、ユーザーは様々なエラーシナリオに対して明確なフィードバックを得ることができ、ユーザーエクスペリエンスが向上します。エラーメッセージは幅広い潜在的な問題をカバーしているため、ユーザーは問題をより簡単にトラブルシューティングできるようになります。これらのエラーメッセージの追加に問題はないと思われます。
68-68
: キーの名前変更がコードベース全体に与える影響を確認してください。"StyleBeatVITS2LocalServerURL"から"StyleBeatVITS2ServerURL"へのキーの名前変更は、URLがローカルだけでなくリモートサーバーも指す可能性があるため、わかりやすくなっています。ただし、古いキーがコードベースの他の場所で使用されている場合、これは互換性を壊す変更になります。
コードベース全体で古いキーの使用箇所を検索し、すべて新しいキーに更新されていることを確認するために、次のスクリプトを実行してください:
Verification successful
キーの名前変更が正しく実装されていることを確認しました。
コードベース全体を検索した結果、以下のことが確認できました:
- 古いキー "StyleBeatVITS2LocalServerURL" の使用箇所は見つかりませんでした。
- 新しいキー "StyleBeatVITS2ServerURL" は src/components/settings/voice.tsx の315行目で使用されています。
これにより、キーの名前変更が適切に実装され、古いキーの残存使用がないことが確認できました。この変更はコードベース全体で一貫性が保たれており、互換性の問題は発生しないと考えられます。
Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # 説明: コードベース内の"StyleBeatVITS2LocalServerURL"の使用箇所を検索し、"StyleBeatVITS2ServerURL"への更新を確認する # テスト: "StyleBeatVITS2LocalServerURL"を検索。期待される結果: 使用箇所が見つからないこと。 rg --type typescript --type javascript $'StyleBeatVITS2LocalServerURL'Length of output: 104
Script:
#!/bin/bash # 説明: コードベース内の"StyleBeatVITS2LocalServerURL"と"StyleBeatVITS2ServerURL"の使用箇所を検索 # 古いキー"StyleBeatVITS2LocalServerURL"の検索 echo "Searching for StyleBeatVITS2LocalServerURL:" fd -e js -e ts -e jsx -e tsx | xargs grep -n "StyleBeatVITS2LocalServerURL" || echo "No occurrences found" echo -e "\n------------------------\n" # 新しいキー"StyleBeatVITS2ServerURL"の検索 echo "Searching for StyleBeatVITS2ServerURL:" fd -e js -e ts -e jsx -e tsx | xargs grep -n "StyleBeatVITS2ServerURL" || echo "No occurrences found"Length of output: 536
src/features/messages/speakCharacter.ts (4)
16-16
: ローカルホストのURLをハードコーディングしていることを確認してください。
VOICE_VOX_API_URL
の値を'http://localhost:50021'
にハードコーディングすると、設定が簡素化されますが、異なる環境での柔軟性が制限される可能性があります。柔軟性が必要な場合は、環境変数の使用を検討してください。
70-74
: オーディオ合成機能の改善を反映した変更を承認します。
fetchAudioStyleBertVITS2
関数の呼び出しにstylebertvits2ApiKey
、stylebertvits2SdpRatio
、およびstylebertvits2Length
のパラメータを追加することで、オーディオ合成プロセスをより詳細に制御できるようになり、オーディオ出力のカスタマイズが向上します。
229-233
: 関数シグネチャの変更を承認します。
fetchAudioStyleBertVITS2
関数のシグネチャにstylebertvits2ApiKey
、stylebertvits2SdpRatio
、およびstylebertvits2Length
のパラメータを追加することで、関数の呼び出しに加えられた変更と整合性が取れており、オーディオ合成機能の拡張を反映しています。
239-243
: APIコールの変更を承認します。
fetchAudioStyleBertVITS2
内のsynthesizeStyleBertVITS2Api
関数の呼び出しが、新しいパラメータstylebertvits2ApiKey
、stylebertvits2SdpRatio
、およびstylebertvits2Length
を含むように更新されました。これにより、関数シグネチャに加えられた変更と一貫性が保たれ、新しいパラメータが基礎となるAPIコールに正しく伝播されることが保証されます。src/components/menu.tsx (1)
29-29
:showControlPanel
の参照先の変更を確認してください。
showControlPanel
の参照先がmenuStore
からsettingsStore
に変更されています。この変更が意図的であり、アプリケーション全体のアーキテクチャと状態管理戦略に沿っていることを確認してください。また、
showControlPanel
がmenuStore
にあることに依存している他のコード部分がないことを確認してください。もしあれば、この変更によってそれらの依存関係が壊れる可能性があります。src/components/settings/voice.tsx (4)
30-30
: LGTM!新しい状態変数
stylebertvits2ApiKey
が適切に追加されています。命名規則に従っており、StyleBeat VITS2 モデルの新しい設定を導入するという PR の目的に沿っています。
33-34
: LGTM!新しい状態変数
stylebertvits2SdpRatio
とstylebertvits2Length
が適切に追加されています。命名規則に従っており、StyleBeat VITS2 モデルの新しい設定を導入するという PR の目的に沿っています。
315-315
: 修正LGTM!StyleBeat VITS2 サーバー URL のラベルのタイプミスが修正され、一貫性が向上しました。
Line range hint
330-409
: LGTM!StyleBeat VITS2 の設定を構成するための新しい UI 要素が適切に追加されています。API キー、SDP 比、長さの入力フィールドが追加され、状態変数を使用して入力値を保存および更新しています。UI 要素の構造、クラス名、イベントハンドラーが適切に設定されており、ファイル内の既存のパターンと規則に従っています。
# Voice | ||
NEXT_PUBLIC_SELECT_VOICE="" | ||
|
||
# VoiceVox | ||
NEXT_PUBLIC_VOICEVOX_SPEAKER="" | ||
NEXT_PUBLIC_VOICEVOX_SPEED="" | ||
NEXT_PUBLIC_VOICEVOX_PITCH="" | ||
NEXT_PUBLIC_VOICEVOX_INTONATION="" | ||
|
||
# KoeiroMap | ||
NEXT_PUBLIC_KOEIROMAP_KEY="" | ||
|
||
# Google TTS | ||
NEXT_PUBLIC_GOOGLE_TTS_TYPE="" | ||
|
||
# StyleBertVits2 | ||
NEXT_PUBLIC_STYLEBERTVITS2_MODEL_ID="" | ||
NEXT_PUBLIC_STYLEBERTVITS2_STYLE="" | ||
NEXT_PUBLIC_STYLEBERTVITS2_SDP_RATIO="" | ||
NEXT_PUBLIC_STYLEBERTVITS2_LENGTH="" | ||
|
||
STYLEBERTVITS2_SERVER_URL="" | ||
STYLEBERTVITS2_API_KEY="" | ||
|
||
# ElevenLabs | ||
ELEVENLABS_API_KEY="" | ||
|
||
# GSVI TTS | ||
NEXT_PUBLIC_GSVI_TTS_URL="" | ||
NEXT_PUBLIC_GSVI_TTS_MODEL_ID="" | ||
NEXT_PUBLIC_GSVI_TTS_BATCH_SIZE="" | ||
NEXT_PUBLIC_GSVI_TTS_SPEECH_RATE="" | ||
|
||
# Youtube | ||
NEXT_PUBLIC_YOUTUBE_API_KEY="" | ||
NEXT_PUBLIC_YOUTUBE_MODE="" | ||
NEXT_PUBLIC_YOUTUBE_LIVE_ID="" | ||
|
||
# Language | ||
NEXT_PUBLIC_SELECT_LANGUAGE="" | ||
NEXT_PUBLIC_SELECT_VOICE_LANGUAGE="" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
音声合成サービスの設定が追加されました。
様々な音声合成サービス(VoiceVox、KoeiroMap、Google TTS、StyleBertVits2、ElevenLabs、GSVI TTS)の設定用の環境変数が追加されました。利用するサービスに応じて、適切な値を設定してください。
また、NEXT_PUBLIC_SELECT_VOICE
と NEXT_PUBLIC_SELECT_VOICE_LANGUAGE
の環境変数を使用して、音声と音声の言語を選択できるようになりました。
潜在的なセキュリティ問題について
STYLEBERTVITS2_SERVER_URL
、STYLEBERTVITS2_API_KEY
、ELEVENLABS_API_KEY
の環境変数は NEXT_PUBLIC_
のプレフィックスがついていないため、クライアント側に公開されるべきではありません。これらの変数にはシークレットな情報が含まれている可能性があります。プレフィックスを追加するか、サーバー側でのみ使用するようにしてください。
Summary by CodeRabbit
新機能
バグ修正
ドキュメント
リファクタリング
スタイル